// import com->alibaba->druid->sql->ast->SQLExpr_ptr ;
// import com->alibaba->druid->sql->ast->SQLName_ptr ;
// import com->alibaba->druid->sql->ast->SQLObject_ptr ;
// import com->alibaba->druid->sql->ast->SQLStatementImpl;
// import com->alibaba->druid->sql->visitor->SQLASTVisitor*;

// import java->util->ArrayList;
// import java->util->std::list;
#pragma once

#include "../SQLExpr.h"
#include "../SQLName.h"
#include "../SQLObject.h"
#include "../SQLStatementImpl.h"
// #include "../../visitor/SQLASTVisitor.h"

#include "SQLExprTableSource.h"
#include "../../../utils/common_ptr.h"

class SQLCommentStatement_Type
{
public:
  static SQLCommentStatement_Type_ptr TABLE;
  static SQLCommentStatement_Type_ptr COLUMN;
  static SQLCommentStatement_Type_ptr INDEX;
  static SQLCommentStatement_Type_ptr VIEW;
  string_ptr name;
  uint64_t mask;
  SQLCommentStatement_Type(uint64_t mask, string_ptr name);
};

class SQLCommentStatement : virtual public SQLStatementImpl
{
public:
  SQLExprTableSource_ptr on;
  SQLCommentStatement_Type_ptr type;
  SQLExpr_ptr comment;

  SHAREDOBJECT(SQLCommentStatement) ;
  SQLExpr_ptr getComment();

  void setComment(SQLExpr_ptr comment);

  SQLCommentStatement_Type_ptr getType();

  void setType(SQLCommentStatement_Type_ptr type);

  SQLExprTableSource_ptr getOn();

  void setOn(SQLExprTableSource_ptr on);

  void setOn(SQLName_ptr on);

  // void accept0(SQLASTVisitor* visitor) ;

  SQLObject_list_ptr getChildren();
};
